package com.internetCafes.spms.web.tenant.service;

import com.internetCafes.spms.core.model.pageModel.DataGrid;
import com.internetCafes.spms.web.tenant.model.TenantDeptInfo;
import com.internetCafes.spms.web.tenant.vo.TenantDeptInfoVo;

import java.util.List;
import java.util.Map;

/**
 * 租户组织架构
 *
 * @author Sunny
 * @email rekeeper2011@hotmail.com
 * @date 2019-10-31 18:09:54
 */
public interface TenantDeptInfoService {

    /**
     * 获取部门树形结构
     *
     * @param tenantId   企业id
     * @param filterFlag 过滤标签
     * @return 树型数据结构
     */
    TenantDeptInfoVo tree(Long tenantId, Integer filterFlag);

    /**
     * 所有部门列表
     */
    List<TenantDeptInfo> allList();

    /**
     * 查询
     */
    List<TenantDeptInfo> query(Map<String, Object> params);

    /**
     * ID查询
     */
    TenantDeptInfo findById(Long id);

    /**
     * ID批量查询
     */
    List<TenantDeptInfo> queryByIds(List<Long> ids);

    /**
     * 参数分页查询
     */
    List<TenantDeptInfo> page(Map<String, Object> params, int page, int rows);

    /**
     * 参数查询总数
     */
    long count(Map<String, Object> params);

    /**
     * First查询
     */
    TenantDeptInfo findFirst(Map<String, Object> params);

    /**
     * 保存
     */
    int save(TenantDeptInfo tenantDeptInfo);

    /**
     * 批量保存
     */
    int saveBatch(List<TenantDeptInfo> tenantDeptInfoList);

    /**
     * 选择保存
     */
    int saveSelective(TenantDeptInfo tenantDeptInfo);

    /**
     * 修改
     */
    int update(TenantDeptInfo tenantDeptInfo);

    /**
     * 选择修改
     */
    int updateSelective(TenantDeptInfo tenantDeptInfo);

    /**
     * 删除
     */
    int delete(Long id);

    /**
     * 批量删除
     */
    int deleteBatch(List<Long> ids);

    /**
     * 批量删除
     */
    void deleteBatch(Long[] ids);


    /**
     * DataGrid
     */
    DataGrid dataGrid(Map<String, Object> params, int pageNo, int pageSize);

    List<TenantDeptInfoVo> getChildren(Long id, List<TenantDeptInfoVo> resultList);


    List<TenantDeptInfoVo> selectByParamsUnionTenant(Map<String, Object> params);

    /**
     * 获取部门下证书数量
     *
     * @param vo
     * @return
     */
    void getCertificateCount(TenantDeptInfoVo vo, Long tenantId, List<TenantDeptInfoVo> tenantDeptInfoList);


    List<TenantDeptInfoVo> countByParamsUnionEmployee(long id);

    List<TenantDeptInfoVo> selectByParamsUnionCertificate();

}
